/* =============================================================
 * string-utils.js v1.2.0
 * =============================================================
 * Original written by Ysy
 * =============================================================
 * Date 15/06/2020
 * ============================================================ */

"use strict";
let StringUtils = {

    /**
     * 字符串非空判定  undefined null "    " 都会认为是空串
     * @param str  需要判断的字符串
     * @returns {boolean}
     */
    isEmpty: function (str) {
        // 正则表达式用于判斷字符串是否全部由空格或换行符组成
        let reg = /^\s*$/;
        if (str && str !== "" && !reg.test(str)) return false;

        return true;
    },

    /**
     * 字符串非空判定
     * @param str  需要判断的字符串
     * @returns {boolean}
     */
    isNotEmpty: function (str) {
        return !this.isEmpty(str);
    },

    /**
     * @Description 字符串值是否相等判断  这里不做严格比较
     * @param str1
     * @param str2
     * @returns {boolean}
     */
    equals: function (str1, str2) {
        let boolean = false;
        if (!str1 || !str2) return boolean;

        if (str1 == str2) boolean = true;
        return boolean;
    },

    /**
     * 将 "{min=0,aver=0.10,max=0.60}"  转为对象
     * @param str  需要转化的字符串
     */
    formatToObject: function (str) {
        let obj = {};
        if (!str || !CommonUtils.isString(str)) return obj;

        str = str.replace("{", "").replace("}", "");
        str.replace(/(\w+)(?:=([^,]*))?/g, (str, key, value) => {
            obj[key] = value;
        });

        return obj;
    },

    /**
     * 字符串转数字
     * @param str  需要转化的字符串
     * @param radix  转换进制  10-十进制
     * @returns {number|*}
     */
    toNumber: function (str, radix) {// radix:转换进制
        if (!str || !CommonUtils.isString(str)) return str;

        radix = radix ? radix : 10;// 默认10进制转换
        if (/^-?\d+$/.test(str)) {// 整数
            return Number.parseInt(str, radix);
        } else if (/^(-?\d+)(\.\d+)?$/.test(str)) {// 浮点数
            return Number.parseFloat(str);
        }

        return str;
    },

    /**
     * 对一个字符串或数字取整数或小数部分
     * @param param  需要处理的字符串或数字
     * @param type  需要取的部分  int-代表取整数部分  float-代表取小数部分
     * @returns {string|*|number|number}
     */
    getNumberPart: function (param, type) {
        if (!param) return "";

        let num = CommonUtils.isString(param) ? this.strToNumber(param) : param;
        if (!CommonUtils.isNumber(num)) return num;

        if (Object.is("int", type)) {// 取整数部分
            return Math.trunc(num);
        } else if (Object.is("float", type)) {// 取小数部分
            return this.subtraction(num, Math.trunc(num));
        }
        return param;
    },
};

